漫画 gui
# !/usr/bin/python
# coding : cp936
# CopyRight 2012 Adou , All Rights Reserved .
import cv , cv2
import math
import os
import sys
from Tkinter import *
import Tkinter
from PIL import Image , ImageTk
global ksize1 , ksize2 , sigma , edge , imglabel
#ksize1 = IntVar()
#sigma = DoubleVar()
#filename = StringVar()
#sigma = DoubleVar()
def odd( num ) :
num = int( num )
if num/2*2 == num :
num -= 1
return num
def oddf( num ) :
ksize1.set( odd(ksize1.get()) )
ksize2.set( odd(ksize2.get()) )
def filter():
''''''
global filename , ksize1 , ksize2 , sigma , edge , imglabel , tkedge
if not os.path.isfile(filename.get()) :
print 'no such file'
return
else :
print filename.get()
img = cv2.imread(filename.get())
#height , width , dim = img.shape
#img = cv2.bilateralFilter(img,10,20,5) # 1
img = cv2.bilateralFilter(img,4,8,2) # 6
img = cv2.bilateralFilter(img,4,8,2) # 6
img = cv2.bilateralFilter(img,4,8,2) # 6
img = cv2.bilateralFilter(img,4,8,2) # 6
img = cv2.bilateralFilter(img,4,8,2) # 6
imgray = cv2.cvtColor(img,cv.CV_RGB2GRAY)
#sizeq = min(width,height)
#sizeq = height
sizeq = int( img.size**0.5*0.8 )
edge1 = cv2.GaussianBlur(imgray,(ksize1.get(),ksize1.get()),sigma.get())
edge2 = cv2.GaussianBlur(imgray,(ksize2.get(),ksize2.get()),sigma.get())
sum1 = cv2.sumElems(edge1)
sum2 = cv2.sumElems(edge2)
if sum1 > sum2 :
edge = edge1 - edge2
else :
edge = edge2 - edge1
edge = 255 - edge
cv2.imshow('Img2Cartoon',edge)
#piedge = Image.fromstring('L',edge.shape,edge.tostring())
#piedge = Image.fromarray(edge)
#print piedge
#tkedge = ImageTk.PhotoImage( piedge )
#print tkedge
#imglabel['image'] = tkedge
#edge = cv2.bilateralFilter(edge,10,20,5)
#edge = cv2.morphologyEx( edge , cv2.MORPH_OPEN , st )
#edge = cv2.morphologyEx( edge , cv2.MORPH_CLOSE , st )
#edge = cv2.threshold(edge,40,1,cv2.THRESH_BINARY)
#cv2.imshow('DoG',edge)
#img = cv2.cvtColor(img,cv.CV_Lab2RGB)
#edges = cv2.cvtColor(edge,cv.CV_GRAY2RGB)
#basename = os.path.basename(filename)
#cv2.imwrite('after/'+basename,edge)
def savef() :
global edge , filename
cv2.imwrite('cartoon_'+filename.get(),edge)
if __name__ == '__main__' :
'''test'''
global filename , ksize1 , ksize2 , sigma , imglabel
root = Tk()
root.title('Img2Cartoon')
#root.geometry('640x480+100+160')
###############################################
label1 = Label(root,text='ksize1',width=16)
label1.grid(row=0,column=0)
ksize1 = IntVar()
scale1 = Scale(root,from_=1,to=17,resolution=1,variable=ksize1,orient=HORIZONTAL,length=360,command=oddf)
ksize1.set(3)
scale1.grid(row=0,column=1)
filename = StringVar()
entry = Entry(root,text='1.jpg',textvariable=filename)
filename.set('1.jpg')
entry.grid(row=0,column=2)
###############################################
label2 = Label(root,text='ksize2',width=16)
label2.grid(row=1,column=0)
ksize2 = IntVar()
scale2 = Scale(root,from_=1,to=17,resolution=1,variable=ksize2,orient=HORIZONTAL,length=360,command=oddf)
ksize2.set(5)
scale2.grid(row=1,column=1)
btn1 = Button(root,text='process',command=filter,width=16)
btn1.grid(row=1,column=2)
###############################################
label3 = Label(root,text='ksize3',width=16)
label3.grid(row=2,column=0)
sigma = DoubleVar()
scale3 = Scale(root,from_=0.1,to=4.0,resolution=0.1,variable=sigma,orient=HORIZONTAL,length=360)
sigma.set(1.8)
scale3.grid(row=2,column=1)
btn2 = Button(root,text='save',command=savef,width=16)
btn2.grid(row=2,column=2)
###############################################
imglabel = Label(root,bd=0)
imglabel.grid(row=3,column=0,columnspan=3)
root.mainloop()